home *** CD-ROM | disk | FTP | other *** search
/ Personal Computer World 2009 February / PCWFEB09.iso / Software / Resources / Chat & Communication / Digsby build 37 / digsby_setup.exe / lib / protocols / api.pyo (.txt) < prev    next >
Python Compiled Bytecode  |  2008-10-13  |  6KB  |  194 lines

  1. # Source Generated with Decompyle++
  2. # File: in.pyo (Python 2.5)
  3.  
  4. __all__ = [
  5.     'adapt',
  6.     'declareAdapterForType',
  7.     'declareAdapterForProtocol',
  8.     'declareAdapterForObject',
  9.     'advise',
  10.     'declareImplementation',
  11.     'declareAdapter',
  12.     'adviseObject']
  13. _marker = object()
  14. from sys import _getframe, exc_info, modules
  15. from types import ClassType
  16. ClassTypes = (ClassType, type)
  17. from adapters import NO_ADAPTER_NEEDED, DOES_NOT_SUPPORT, AdaptationFailure
  18. from adapters import bindAdapter
  19. from peak.util.decorators import decorate_class, frameinfo
  20. from interfaces import IOpenProtocol, IOpenProvider, IOpenImplementor
  21. from interfaces import Protocol, InterfaceClass
  22.  
  23. def adapt(obj, protocol, default = _marker):
  24.     if isinstance(protocol, ClassTypes) and isinstance(obj, protocol):
  25.         return obj
  26.     
  27.     
  28.     try:
  29.         _conform = obj.__conform__
  30.     except AttributeError:
  31.         pass
  32.  
  33.     
  34.     try:
  35.         result = _conform(protocol)
  36.         if result is not None:
  37.             return result
  38.     except TypeError:
  39.         if exc_info()[2].tb_next is not None:
  40.             raise 
  41.         
  42.     except:
  43.         exc_info()[2].tb_next is not None
  44.  
  45.     
  46.     try:
  47.         _adapt = protocol.__adapt__
  48.     except AttributeError:
  49.         pass
  50.  
  51.     
  52.     try:
  53.         result = _adapt(obj)
  54.         if result is not None:
  55.             return result
  56.     except TypeError:
  57.         if exc_info()[2].tb_next is not None:
  58.             raise 
  59.         
  60.     except:
  61.         exc_info()[2].tb_next is not None
  62.  
  63.     if default is _marker:
  64.         raise AdaptationFailure("Can't adapt", obj, protocol)
  65.     
  66.     return default
  67.  
  68.  
  69. try:
  70.     from _speedups import adapt
  71. except ImportError:
  72.     pass
  73.  
  74.  
  75. def declareAdapterForType(protocol, adapter, typ, depth = 1):
  76.     adapter = bindAdapter(adapter, protocol)
  77.     adapter = adapt(protocol, IOpenProtocol).registerImplementation(typ, adapter, depth)
  78.     oi = adapt(typ, IOpenImplementor, None)
  79.     if oi is not None:
  80.         oi.declareClassImplements(protocol, adapter, depth)
  81.     
  82.  
  83.  
  84. def declareAdapterForProtocol(protocol, adapter, proto, depth = 1):
  85.     adapt(protocol, IOpenProtocol)
  86.     adapt(proto, IOpenProtocol).addImpliedProtocol(protocol, bindAdapter(adapter, protocol), depth)
  87.  
  88.  
  89. def declareAdapterForObject(protocol, adapter, ob, depth = 1):
  90.     adapt(protocol, IOpenProtocol).registerObject(ob, bindAdapter(adapter, protocol), depth)
  91.  
  92. IOpenProtocol.registerImplementation(InterfaceClass)
  93. IOpenProtocol.registerImplementation(Protocol)
  94.  
  95. def declareAdapter(factory, provides, forTypes = (), forProtocols = (), forObjects = ()):
  96.     for protocol in provides:
  97.         for typ in forTypes:
  98.             declareAdapterForType(protocol, factory, typ)
  99.         
  100.         for proto in forProtocols:
  101.             declareAdapterForProtocol(protocol, factory, proto)
  102.         
  103.         for ob in forObjects:
  104.             declareAdapterForObject(protocol, factory, ob)
  105.         
  106.     
  107.  
  108.  
  109. def declareImplementation(typ, instancesProvide = (), instancesDoNotProvide = ()):
  110.     for proto in instancesProvide:
  111.         declareAdapterForType(proto, NO_ADAPTER_NEEDED, typ)
  112.     
  113.     for proto in instancesDoNotProvide:
  114.         declareAdapterForType(proto, DOES_NOT_SUPPORT, typ)
  115.     
  116.  
  117.  
  118. def adviseObject(ob, provides = (), doesNotProvide = ()):
  119.     for proto in provides:
  120.         declareAdapterForObject(proto, NO_ADAPTER_NEEDED, ob)
  121.     
  122.     for proto in doesNotProvide:
  123.         declareAdapterForObject(proto, DOES_NOT_SUPPORT, ob)
  124.     
  125.  
  126.  
  127. def advise(**kw):
  128.     kw = kw.copy()
  129.     frame = _getframe(1)
  130.     (kind, module, caller_locals, caller_globals) = frameinfo(frame)
  131.     if kind == 'module':
  132.         moduleProvides = kw.setdefault('moduleProvides', ())
  133.         del kw['moduleProvides']
  134.         for k in kw:
  135.             raise TypeError('Invalid keyword argument for advising modules: %s' % k)
  136.         
  137.         adviseObject(module, provides = moduleProvides)
  138.         return None
  139.     elif kind != 'class':
  140.         raise SyntaxError('protocols.advise() must be called directly in a class or module body, not in a function or exec.')
  141.     
  142.     classProvides = kw.setdefault('classProvides', ())
  143.     classDoesNotProvide = kw.setdefault('classDoesNotProvide', ())
  144.     instancesProvide = kw.setdefault('instancesProvide', ())
  145.     instancesDoNotProvide = kw.setdefault('instancesDoNotProvide', ())
  146.     asAdapterForTypes = kw.setdefault('asAdapterForTypes', ())
  147.     asAdapterForProtocols = kw.setdefault('asAdapterForProtocols', ())
  148.     protocolExtends = kw.setdefault('protocolExtends', ())
  149.     protocolIsSubsetOf = kw.setdefault('protocolIsSubsetOf', ())
  150.     factoryMethod = kw.setdefault('factoryMethod', None)
  151.     equivalentProtocols = kw.setdefault('equivalentProtocols', ())
  152.     map(kw.__delitem__, 'classProvides classDoesNotProvide instancesProvide instancesDoNotProvide asAdapterForTypes asAdapterForProtocols protocolExtends protocolIsSubsetOf factoryMethod equivalentProtocols'.split())
  153.     for k in kw:
  154.         raise TypeError('Invalid keyword argument for advising classes: %s' % k)
  155.     
  156.     
  157.     def callback(klass):
  158.         if classProvides or classDoesNotProvide:
  159.             adviseObject(klass, provides = classProvides, doesNotProvide = classDoesNotProvide)
  160.         
  161.         if instancesProvide or instancesDoNotProvide:
  162.             declareImplementation(klass, instancesProvide = instancesProvide, instancesDoNotProvide = instancesDoNotProvide)
  163.         
  164.         if asAdapterForTypes or asAdapterForProtocols:
  165.             if not instancesProvide:
  166.                 raise TypeError('When declaring an adapter, you must specify what its instances will provide.')
  167.             
  168.             if factoryMethod:
  169.                 factory = getattr(klass, factoryMethod)
  170.             else:
  171.                 factory = klass
  172.             declareAdapter(factory, instancesProvide, forTypes = asAdapterForTypes, forProtocols = asAdapterForProtocols)
  173.         elif factoryMethod:
  174.             raise TypeError("'factoryMethod' is only used when declaring an adapter type")
  175.         
  176.         if protocolExtends:
  177.             declareAdapter(NO_ADAPTER_NEEDED, protocolExtends, forProtocols = [
  178.                 klass])
  179.         
  180.         if protocolIsSubsetOf:
  181.             declareAdapter(NO_ADAPTER_NEEDED, [
  182.                 klass], forProtocols = protocolIsSubsetOf)
  183.         
  184.         if equivalentProtocols:
  185.             declareAdapter(NO_ADAPTER_NEEDED, equivalentProtocols, forProtocols = [
  186.                 klass])
  187.             declareAdapter(NO_ADAPTER_NEEDED, [
  188.                 klass], forProtocols = equivalentProtocols)
  189.         
  190.         return klass
  191.  
  192.     decorate_class(callback)
  193.  
  194.